package system;

import cn.hutool.core.io.FileUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class DataToKaoChang {

    private List<Map<String,Object>> useData;
    private List<Map<String,Object>> zixiData;
    private List<KaoChang> kaoChangs;

    public DataToKaoChang(List<Map<String,Object>> useData,List<Map<String,Object>> zixiData,String initPath){
        this.useData=useData;
        this.zixiData=zixiData;
        this.kaoChangs=kaoChangInit(initPath);//"E:\\考试编排\\课室配置表.xlsx"
    }

    public List<KaoChang> kaoChangInit(String initPath){
        ExcelReader reader= ExcelUtil.getReader(FileUtil.file(initPath));
        List<Map<String,Object>> readAll = reader.readAll();
        List<KaoChang> kaoChangs=new ArrayList<>();
        Iterator<Map<String,Object>> iterator=readAll.iterator();
        while (iterator.hasNext()){
            Map<String,Object> data=iterator.next();
            KaoChang kaoChang=new KaoChang();
            kaoChang.setAddress((String) data.get("班别"));
            kaoChang.setName((String) data.get("考场名"));
            kaoChang.setDoor((String) data.get("门的方向"));
            kaoChang.setColNumber(6);
            kaoChang.setRowNumber(((Long) data.get("人数")).intValue()/6);
            kaoChang.setWorking(false);
            kaoChangs.add(kaoChang);
        }
        return kaoChangs;
    }

    public List<KaoChang> toKaoChang(int number54,int number48,int number42){
        makeUserKaoChang(number54,54);
        makeUserKaoChang(number48,48);
        makeUserKaoChang(number42,42);
        makeZixiKaoChang();
        return kaoChangs;
    }

    public void makeUserKaoChang(int number,int size){
        while(number>0){
            Iterator<KaoChang> iterator=kaoChangs.iterator();
            while(iterator.hasNext()){
                KaoChang kaoChang=iterator.next();
                if(!kaoChang.isWorking()&&kaoChang.getSize()==size){
                    kaoChang.setWorking(true);
                    List<Map<String,Object>> datas=useData.subList(0,size<useData.size()?size:useData.size());
                    kaoChang.setDatas(datas);
                    useData.removeAll(datas);
                    break;
                }
            }
            number--;
        }
    }

    public void makeZixiKaoChang(){
        Iterator<KaoChang> iterator=kaoChangs.iterator();
        while(iterator.hasNext()){
            KaoChang kaoChang=iterator.next();
            if(!kaoChang.isWorking()){
                List<Map<String,Object>> datas=zixiData.subList(0,kaoChang.getSize()<useData.size()?kaoChang.getSize():useData.size());
                kaoChang.setDatas(datas);
                zixiData.removeAll(datas);
            }
        }
    }
}
